package sifeap.pl.managedbean.reportes;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import sifeap.bl.ejb.reportes.ReporteBLLocal;
import sifeap.bl.ejb.solicitudescredito.SolicitudCreditoBLLocal;
import sifeap.entities.solicitudescredito.SolicitudCredito;
import sifeap.entities.solicitudescredito.TipoCredito;
import sifeap.entities.solicitudescredito.valueobject.SolicitudCreditoVO;
import sifeap.exception.SifeapException;
import sifeap.pl.managedbean.usuarios.LoginManagedBean;
import sifeap.pl.util.FacesUtils;
import sifeap.util.Util;

@ManagedBean(name="carteraCreditoManagedBean")
@SessionScoped
public class CarteraCreditoManagedBean {
	private SolicitudCreditoVO solicitudCreditoVo;
	
	private final String MENSAJES_BUNDLE = "sifeap.pl.bundles.mensajes";
	
	@EJB
	private ReporteBLLocal reporteBL;
	
	@EJB
	private SolicitudCreditoBLLocal solicitudCreditoBL;

	@PostConstruct
	public void inicializar() {
		cargarDatosPredeterminados();
	}
	
	public SolicitudCreditoVO getSolicitudCreditoVo() {
		return solicitudCreditoVo;
	}

	public void setSolicitudCreditoVo(SolicitudCreditoVO solicitudCreditoVo) {
		this.solicitudCreditoVo = solicitudCreditoVo;
	}

	public List<SelectItem> getItemsTiposCredito() {
		List<TipoCredito> listaTipoCredito;
		List<SelectItem> itemsTiposCredito = new ArrayList<SelectItem>();
		try {
			listaTipoCredito = solicitudCreditoBL.buscarTiposCredito();
			if (listaTipoCredito != null) {
				for (TipoCredito tipoCredito : listaTipoCredito) {
					itemsTiposCredito.add(new SelectItem(String.valueOf(tipoCredito.getIdTipoCredito()), tipoCredito.getNombre()));
				}
			}
		} catch (SifeapException e) {
			e.printStackTrace();
		}
		return itemsTiposCredito;
	}
	
	private void cargarDatosPredeterminados() {
		//Inicializa los objetos
		setSolicitudCreditoVo(new SolicitudCreditoVO());
		getSolicitudCreditoVo().setSolicitudCredito(new SolicitudCredito());
		getSolicitudCreditoVo().getSolicitudCredito().setTiposcredito(new TipoCredito());
	}
	
	public void generarReporte() {
		try {
			if (getSolicitudCreditoVo().getFechaInicio() != null && getSolicitudCreditoVo().getFechaFin() != null
					&& getSolicitudCreditoVo().getFechaFin().compareTo(getSolicitudCreditoVo().getFechaInicio()) < 0) {
				try {
					FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.fechasnovalidas"), false);
				} catch (SifeapException em) {}
				return;
			}
			
			byte[] reporte = reporteBL.generarReporteCarteraCredito(getSolicitudCreditoVo());
			
			if (reporte != null) {
				FacesUtils.enviarAlNavegador(new ByteArrayInputStream(reporte), "CarteraLineaCredito"+Util.obtenerCadenaFecha()+".pdf", true);
			} else {
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.sinresultado"), false);
			}
		} catch (Exception e) {
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.error"), false);
			} catch (SifeapException em) {}
			e.printStackTrace();
		}
	}
	
	public String limpiar() {
		cargarDatosPredeterminados();
		return "/web/reportes/carteraLineaCredito.jsf?faces-redirect=true";
	}
	
	public boolean isTienePermisos() {
		return LoginManagedBean.tienePermisos("rep_cartera_credito:crear");
	}
}